<?php
// +----------------------------------------------------------------------
// | YBlog
// +----------------------------------------------------------------------
// | Copyright (c) 2008 http://www.yhustc.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: yhustc <yhustc@gmail.com>
// +----------------------------------------------------------------------
// $Id$

/**
 +------------------------------------------------------------------------------
 * YBlog用户信息管理模块
 +------------------------------------------------------------------------------
 * @author    yhustc <yhustc@gmail.com>
 * @version   $Id$
 +------------------------------------------------------------------------------
 */


class UserAction extends BaseAction
{
	/**
     +----------------------------------------------------------
     * 用户信息页面
     +----------------------------------------------------------
     * @access public 
     +----------------------------------------------------------
     */
	function index()
	{
		$userviewDao = D("UserView");
		
		$where = array();
		$where["ID"] = Session::get(C("USER_AUTH_KEY"));
		
		$this->assign("pageFile","User:index");
		$this->assign("user",$userviewDao->find($where));
		$this->layout();
	}
	
	/**
     +----------------------------------------------------------
     * 保存对用户信息的修改
     +----------------------------------------------------------
     * @access public 
     +----------------------------------------------------------
     */
	function save()
	{
		//先把上传的头像文件搞好,再来写数据库
		if(!empty($_FILES["faceImg"]["name"]))
		{
			$user_config = require "user_config.php";
			if(!is_writeable($user_config['UPLOAD_PATH']))
                $this->error("上传目录".$user_config['UPLOAD_PATH']."不可写");
            
            //由于只有一个文件要上传,这里就不使用上传类了,自己处理
			if(!strstr($_FILES["faceImg"]["type"],"image/"))
				$this->error("上传的文件不是一个图片文件");
			else if($_FILES["faceImg"]["size"] > $user_config['ATTACHMENT_SIZE'])
				$this->error("上传图片大小超过了附件设置所允许的大小");
	        //设置附件上传目录
	        //上传文件按月存到不同文件夹,所以先检查文件夹,没有的话就新建
	        $uploadDir = $user_config['UPLOAD_PATH']."/".date("Y-m")."/";
	        if(!is_dir($uploadDir))
			{
				mkdir($uploadDir); //默认的 mode 是 0777
	        }	        
	        
	        //如果用户上传的图片太大了,得帮他生成个小图
	        import("ORG.Util.Image");
	        $filename = $uploadDir.time().substr($_FILES["faceImg"]["name"],strrpos($_FILES["faceImg"]["name"],"."));
	        if(!move_uploaded_file($_FILES["faceImg"]["tmp_name"],$filename))
	            $this->error('文件上传保存错误！');
            $image =  Image::getImageInfo($filename);
            if(false !== $image) {
            	$thumbFile = Image::thumb($filename,'','',150,150,true);
            	if($thumbFile)
                	$_POST["user_picture"] = str_replace("./",$this->options["siteurl"]."/",$thumbFile);
                else
                	$this->error("无法对头像图片进行缩略图处理!");
            }
            else
            	$this->error("上传的头像文件是一个无效的图片");
	    }
	    
		//由于ViewModel暂时不支持关联写入,所以得自己整成两个Model来保存修改信息
		$userDao = D("User");
		$user = $userDao->find("ID='".Session::get(C("USER_AUTH_KEY"))."'");

		if(empty($_POST["origin"])) //原始密码为空,不修改密码,但是create的时候还是会自动填充user_pass表项,所以要用之前的密码来填充
			$_POST["user_pass"] = $_POST["user_pass_confirm"] = $user["user_pass"];
		else if($user["user_pass"] != md5($_POST["origin"]))
			$this->error("原始密码错误!");
		else if(!empty($_POST["user_pass"])) //修改密码,由于上面的第一个if,导致进入create之前这个密码就应该是一个md5的计算结果,所以这里也要先算一下
		{
			$_POST["user_pass"] = md5($_POST["user_pass"]);
			$_POST["user_pass_confirm"] = md5($_POST["user_pass_confirm"]);
		}
		else
			$this->error("新密码不能为空!");
		
		if(!$userDao->create())
			$this->error($userDao->getError());		
		if(!$userDao->save())
			$this->error("保存用户基本信息失败!");
		
		$usermetaDao = D("Usermeta");
		if(!$usermetaDao->create())
			$this->error($usermetaDao->getError());	
		if(!$usermetaDao->save(null,"user_id='".Session::get(C("USER_AUTH_KEY"))."'"))
			$this->error("保存用户扩展信息失败!");

		$this->success("修改用户信息成功!");
	}
}
?>